关于Mybatis查询Sql结果未映射到对应得实体类上 您所在的位置:网站首页 mybatis 嵌套查询select column映射 关于Mybatis查询Sql结果未映射到对应得实体类上

关于Mybatis查询Sql结果未映射到对应得实体类上

2024-07-13 15:06| 来源: 网络整理| 查看: 265

使用Mybatis查询的时候,已经确定sql语句没问题,可以正常查询出正常的结果集,但是使用实体类接收的时候,发现对应的实体类中本该有值的字段好多却都是null。也就是说,有些查询结果并没有映射到实体类对应的字段上

首先要知道,Mybatis与实体类的映射方式,常见的主要是有两种。不同的映射方式,也对应不同的接收方式。

1)依靠resultMap参数映射

通过select标签中resultMap属性进行接收结果集,需要提前编写resultMap映射的xml

编写resultMap标签的xml。如下,可以将数据库字段和实体类字段进行映射关联。

其中,id="BaseResultMap" 为resultMap标签的名称,通过BaseResultMap可在当前xml中引用该映射关系。type="***.***.***.job.model.Product" 代表该映射关系指向的实体类,另外column为数据库字段,property为实体类字段。

如果采用这种方式映射,那么使用select标签查询时,返回类型就可以用resultMap的id进行接收。将select标签中的接收参数设置为resultMap = "BaseResultMap"。如下图所示

select from product_tab

如果此时,错误使用了resultType= "BaseResultMap"属性接收,编辑器会报红提示,同时会造成某些实体类字段接收不到值,显示为null

2)依靠resultType参数映射

如果不想编写resultMap,我们也可以使用select 标签中的resultType进行接收。

此时resultType 指向具体的实体类。

但是,这种方式需要满足下面三个条件之一:

表中的字段和实体类字段一致实体类字段满足驼峰格式。如,表中字段product_url,实体类的字段,要写成productUrl。sql语句中字段有别名,且别名和实体类字段要么一致,要么满足驼峰转换规则

上面三种方式,其实都是为了满足resultType隐式映射的条件。

如果以上三个条件都满足,还是出现某些实体类字段为null。就去检查一下是否未设置mybatis的mapUnderscoreToCamelCase参数。因为该参数默认为false。

mapUnderscoreToCamelCase属性设置为true。 可以自动将以下画线方式命名的数据库列映射到 Java 对象的驼峰式命名属性中。

设置方式如下:

3)总结

1)如果你写了resultMap 的xml映射,那么select标签的属性选择resultMap。且确保column属性中的值对应sql 语句中的列,property属性中的值对应的是实体类中字段名

2)如果你没写resultMap 的xml映射,那也没事。mybatis会自动帮你映射。但是你的select标签的属性要使用resultType属性,用于指向具体的实体类。但同时,你要满足上面三个条件之一。同时确保mapUnderscoreToCamelCase参数为true

无论使用resultMap或者resultType进行接收,最终目的都是将SQL语句中,结果集的列和实体类的字段名相关联。resultMap是通过显式的方式,手动映射。resultType是通过隐式的方式,自动转换进行映射。

在使用的时候,建议编写resultMap,只要映射没错,基本上不会出现为null的情况,实体类的字段可以随便写。并且resultMap还支持一对多、多对多的映射方式。而resultType对实体类的命名规范比较严格。适合简单、编写规范的对象模型。

当然如果你库表中的字段很多的话,可以使用mybatis-generator生成工具,直接生成resultMap的xml



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有